﻿#include <omp.h>
#include <stdio.h>  // 添加标准输入输出头文件

int a;

void g(int k) {
#pragma omp critical  // 防止多线程同时修改全局变量
    {
        a = k;
        printf("Thread %d: 全局变量 a 被修改为 %d\n",
            omp_get_thread_num(), a);
    }
}

void f(int n) {
    int local_a = 0;
#pragma omp parallel for private(local_a)
    for (int i = 1; i < n; i++) {
        local_a = i;
        printf("线程 %d: 开始循环 i=%d, local_a=%d\n",
            omp_get_thread_num(), i, local_a);
        g(local_a * 2);
    }
}

int main() {
    printf("程序启动，开启 %d 个线程\n", omp_get_max_threads());
    f(10);
    printf("\n最终全局变量 a = %d\n", a);
    return 0;
}